#!/usr/bin/python
# -*- coding: utf-8 -*-

from gameobject import GameObject

from pygame.mixer import Sound

class Paddle( GameObject ):
    """
    Representa a raquete (e então jogador).
    """
    moving = None
    sound  = None
    
    def __init__( self, image, pos, marea, sound=None ):
        GameObject.__init__( self, image, pos, marea )
        self.moving = [ False, False ] # Movendo: Cima, Baixo
        self.sound = None
        if sound:
            try:
                self.sound = Sound( sound )
            except Exception, e:
                print "Could not load sound system:"
                print e
                print
    # __init__()



    def catch( self, rect ):
        """Verifica se a raquete pegou a bola."""
        return self.rect.colliderect( rect )
    # catch()



    def set_move_up( self ):
        """Ativa movimento para cima."""
        self.moving[ 0 ] = True
    # set_move_up()



    def set_move_down( self ):
        """Ativa movimento para baixo."""
        self.moving[ 1 ] = True
    # set_move_down()



    def unset_move_up( self ):
        """Desativa movimento para cima."""
        self.moving[ 0 ] = False
    # unset_move_up()



    def unset_move_down( self ):
        """Desativa movimento para baixo."""
        self.moving[ 1 ] = False
    # unset_move_down()



    def is_moving_up( self ):
        """Verifica se existe movimento para cima."""
        return self.moving[ 0 ]
    # is_moving_up()


    def is_moving_down( self ):
        """Verifica se existe movimento para baixo."""
        return self.moving[ 1 ]
    # is_moving_down()


    def is_moving( self ):
        """
        Verifica se o objeto se move.

        Ele só se move se apenas uma direção estiver ativa e não tiver
        no topo ou baixo.
        """
        top    = ( self.rect.top    == self.marea.top )
        bottom = ( self.rect.bottom == self.marea.bottom )
        up     = self.is_moving_up()
        down   = self.is_moving_down()

        return ( top and down ) or \
               ( bottom and up ) or \
               ( not top and up ) or \
               ( not bottom and down )
    # is_moving()


    def get_speed( self ):
        """Retorna a velocidade do elemento."""
        if self.is_moving():
            if self.is_moving_up():
                return [ 0, - self.accel[ 1 ] ]
            else:
                return [ 0,   self.accel[ 1 ] ]
        else:
            return [ 0, 0 ]
    # get_speed()



    def soundeffect( self ):
        """Emite som."""
        if self.sound:
            self.sound.play()
    # soundeffect()
# Paddle
